// 举个时间复杂度的例子
function go (n) {
  var item = 0 // 1
  for (var i = 0; i < n; i++) { // n
    for (var j = 0; j < n; j++) { // n * n
      item = item + i + j // n * n
    }
  }
  return item // 1
}
// n^2

function go2 (n) {
  var sum = 0 // 1
  for(var i = 0; i < n; i++) { // n
    sum = sum + n // n
  }
}
// n

function go3 (n) {
  console.log(1) // 1
}
// 1

// 嵌套就相乘
function go4(n) {
  var sum = 0
  for (var j = 0; j < n; j++) {
    sum = sum + n
  }
  return sum
}
function main (n) {
  var res = 0
  for (var i = 0; i < n; i++) { // n
    res = res + go(i) // 嵌套了n
  }
}

// n^2

// 多块代码，取复杂度最大的代码块
function go5 (n) {
  for (var i = 0; i < n; i++) {
    for (var j = 0; j < n; j++) {
      console.log(1)
    }
  }

  for (var i = 0; i < n; i ++) {
    console.log(2)
  }
}

// 复杂度最大的代码块是n^2,所以这个函数的for循环时n ^2



// 对数阶乘
function go5(n) {
  var i = 1
  while (i <= n) {
    i = i * 10
  }
}

// i = 1
// i = 1 * 10
// i = 1 * 10 * 10
// i = 1 * 10 * 10 * 10 
// .....

// question: 执行了多少次？
// 设为 Y
// n = 10 ^ y
// y = lgn
// 即时间复杂度时lgn



function go6(m ,n) {
  for (var i = 0; i < n; i++) { // n
    console.log(1) // n
   }
   
   for (var i = 0; i < m; i++) { // m
    console.log(2) // m
   }
}
// 这个形参有两个，无法得知m, n 到底谁大，所以这个代码的时间复杂度是O(m + n)



// 空间复杂度
function timer () {
  var a = 1
  var b = 1
  var c = 1
}
// 空间复杂度  1

function timer2 (n) {
  var arr = Array(n)
}
// 数组的长度根据n来决定，空间复杂度为n


